﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Framework.Physics.Collision
{
    public static class SAP
    {
        #region old
        //public static bool CirclePolyIntersect(Polygon p, Kreis k)
        //{
        //    // offset berechnen
        //    Vektor offset = Vektor.Sub(p.Position, k.Position);
        //    // P - alle Projektionsgeraden ermitteln und projezieren
        //    for (int i = 0; i < p.Count; i++)
        //    {
        //        int l = i + 1;
        //        if (l > p.Count - 1)
        //            l = 0;
        //        // Berechnung der Seitenfläche
        //        Vektor tmp = Vektor.Sub(p[l], p[i]);

        //        // Berechnet die Normale der Seitenfläche
        //        Vektor proj = Vektor.Normalize(Vektor.ToVector(-tmp.Y, tmp.X));

        //        //  Projeziert den ersten Wert
        //        float pmin = Vektor.DotProdukt(p.GetVertex(0), proj);
        //        float pmax = pmin;

        //        // Findet den kleinsten und größten projezierten Wert für die Gerade für A
        //        for (int j = 1; j < p.Count; j++)
        //        {
        //            // projezieren
        //            float dp = Vektor.DotProdukt(p.GetVertex(j), proj);
        //            if (dp < pmin)
        //                pmin = dp;
        //            if (dp > pmax)
        //                pmax = dp;
        //        }
        //        float cmax = Vektor.DotProdukt(Vektor.Scale(proj, k.Radius), proj);
        //        float cmin = -cmax;

        //        // 1D Kollision
        //        float ofset_a = Vektor.DotProdukt(offset, proj);
        //        pmin = pmin + ofset_a;
        //        pmax = pmax + ofset_a;
        //        float d1 = pmin - cmax;
        //        float d2 = cmin - pmax;
        //        // Wenn es keine Überschneidung gibt, abbrechen -> keine Kollision
        //        if ((d1 > 0) || (d2 > 0))
        //            return false; // Abbruchbedingung !!!

        //        //C - Alle Projektionsgeraden ermitteln und projezieren
        //        proj = Vektor.Normalize(Vektor.Sub(k.Position, p.GetVertexAbs(i)));
        //        //  s.o.
        //        pmin = Vektor.DotProdukt(p.GetVertex(0), proj);
        //        pmax = pmin;
        //        for (int j = 0; j < p.Count; j++)
        //        {
        //            float dp = Vektor.DotProdukt(p.GetVertex(j), proj);
        //            if (dp < pmin)
        //                pmin = dp;
        //            if (dp > pmax)
        //                pmax = dp;
        //        }
        //        cmax = Vektor.DotProdukt(Vektor.Scale(proj, k.Radius), proj);
        //        cmin = -cmax;
        //        pmin = pmin + Vektor.DotProdukt(offset, proj); ;
        //        pmax = pmax + Vektor.DotProdukt(offset, proj); ;
        //        d1 = pmin - cmax;
        //        d2 = cmin - pmax;
        //        if ((d1 > 0) || (d2 > 0))
        //            return false; // Abbruchbedingung !!!
        //    }
        //    return true;
#endregion

        //public static bool PolygonIntersect(Polygon p1, Polygon p2)
        //{
        //    return true;
        //}
        
    }
}
